home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib01.dsk / T.O.U.G.H. PLUS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  21KB  |  385 lines

  1. 0  REM  SPEED= <CTRL-Q> DEL 8 ONERR h DEL 9L MID$ <CTRL-C> INPUT G COLOR= " HGR g LOMEM: GH SPEED=   HGR (hL<CTRL-[><UNKNOWN TOKEN>  COLOR=  -
  2. 1  ONERR  GOTO 11000
  3. 3  REM  *************************
  4. 4  REM  ** T.O.U.G.H. SYSTEM   **
  5. 5  REM  ** MICRO-SPARC, INC.   **
  6. 6  REM  ** P.O. BOX 325        **
  7. 7  REM  ** LINCOLN, MASS 01773 **
  8. 8  REM  ** COPYRIGHT (C) 1980  **
  9. 9  REM  *************************
  10. 10  REM  RUNS ON 32-48K APPLE II OR APPLE II PLUS, APPLESOFT II (ROM , DISK II, PARALLEL OR SERIAL PRINTER (WITH PRTR CTRL CHANGES IN LINES 1215-1220, 1248-1250)
  11. 11  PRINT  CHR$(4);"MAXFILES1"
  12. 12  CALL  PEEK(103) + PEEK(104) *256 +5
  13. 13  TEXT : HOME 
  14. 14  PRINT : PRINT "WHAT TITLE/SUBJECT WILL YOU USE?": PRINT "(PRESS RETURN TO SEE CATALOG)": INPUT " ";ST$: IF ST$ = ""  THEN  PRINT  CHR$(4);"CATALOG": GOTO 14
  15. 16  GOSUB 10000: GOTO 50
  16. 18  CALL  -936
  17. 19  IF SL <40  THEN PZ = 12: GOTO 22
  18. 20  IF SL >39  AND SL <80  THEN PZ = 6: GOTO 22
  19. 21 PZ = 4
  20. 22  IF R2 < >I  THEN PZ = 4
  21. 23  FOR ZZ = R1 TO R2 +1  STEP PZ
  22. 24  FOR X = ZZ TO ZZ +PZ -1: IF X >R2  THEN  NEXT : RETURN 
  23. 25  PRINT X;")";: FOR XX = 1 TO  LEN(L$(X)):M$ =  MID$ (L$(X),XX,1)
  24. 26  INVERSE : IF M$ > CHR$(96)  AND M$ < CHR$(123)  THEN M =  ASC(M$) -32:M$ =  CHR$(M): NORMAL 
  25. 27  IF M$ < CHR$(64)  THEN  NORMAL 
  26. 30  PRINT M$;: NORMAL : NEXT XX: PRINT : NEXT X: VTAB 23: PRINT "HIT ANY KEY TO CONTINUE ";: GET ZZ$
  27. 31  HOME : NEXT ZZ
  28. 32  IF SL > = 80  THEN CC =  PEEK(37) -2: VTAB 1: VTAB CC
  29. 35  RETURN 
  30. 40  PRINT  CHR$(12): POKE 36,SL -10: PRINT "PAGE ";PG: PRINT :PG = PG +1:PK = PK +2: RETURN 
  31. 50  HOME : TEXT : NORMAL : VTAB 8: FOR X = 0 TO 39: PRINT "*";: NEXT X: PRINT : VTAB 10: HTAB (15): INVERSE : PRINT "T.O.U.G.H.": NORMAL : HTAB 5: INVERSE : PRINT "COPYRIGHT 1980 (C) BY MICRO-SPARC": NORMAL 
  32. 51  VTAB 14: PRINT "1= TYPE TEXT AND STORE ON DISK": PRINT "2= READ DISK AND PRINT": PRINT "3= READ DISK & EDIT/DELETE/INSERT TEXT"
  33. 52  PRINT "4= ADD SENTENCE(S) TO TEXT": VTAB 20: FOR X = 0 TO 39: PRINT "*";: NEXT X: PRINT 
  34. 53  INVERSE : INPUT "<CTRL-G>ENTER YOUR SELECTION";V: NORMAL 
  35. 54  IF V <1  OR V >4  THEN  PRINT "INVALID ENTRY..TRY AGAIN": GOTO 53
  36. 60  IF V = 1  THEN  GOSUB 10023
  37. 65  IF V = 2  OR V = 3  OR V = 4  THEN  FLASH : PRINT "READING DISK": NORMAL : GOTO 600
  38. 91  TEXT : HOME : FOR X = 0 TO 39: PRINT "*";: NEXT X: PRINT "CTL 'X'","= ABORT CURRENT LINE": PRINT "RIGHT ARROW","= COPY CHARACTER": PRINT "LEFT ARROW","= BACKSPACE A WORD": PRINT "CTL 'Y'","= LINE, NO JUSTIFY"
  39. 92  PRINT "RETURN KEY","= LINE, JUSTIFY": PRINT "CTL 'T'","= TAB": PRINT "'@' KEY","= END, AND WRITE DISK"
  40. 93  PRINT "'ESC' KEY","= CAPITAL LETTER": PRINT "CTL 'G' (BELL)","= IN LINE OPTIONS": PRINT "CTL 'S'","= SHIFT LOCK CAP'S"
  41. 94  INVERSE : PRINT "TYPE SPACE AFTER LAST WORD IN EACH LINE": NORMAL : FOR X = 0 TO 39: PRINT "*";: NEXT X: PRINT 
  42. 95  POKE 34, PEEK(37): INVERSE : PRINT "ENTER TEXT..LINE # ";I: NORMAL : FOR KK = 1 TO SL -1: PRINT  CHR$(95);: NEXT KK: PRINT 
  43. 96  IF SL < = 40  THEN CC =  PEEK(37): VTAB CC
  44. 98  IF SL >40  AND SL < = 80  THEN CC =  PEEK(37) -1: VTAB CC
  45. 100  IF SL >80  THEN CC =  PEEK(37) -2: VTAB CC
  46. 104 N = N +1
  47. 105  GET K$: IF K$ < > CHR$(21)  THEN 109
  48. 106 K$ =  CHR$( PEEK( PEEK(103) + PEEK(104) *256 +34))
  49. 107  IF K$ < CHR$(32)  THEN K$ =  CHR$( ASC(K$) +64):UC = 1: GOTO 109
  50. 108 K$ =  CHR$( ASC(K$) -128):UC = 0
  51. 109  IF UC = 1  AND K$ > CHR$(64)  AND K$ < CHR$(91)  THEN  INVERSE : PRINT K$;: NORMAL :UC = 0: GOTO 240
  52. 110  PRINT K$;: IF K$ =  CHR$(34)  THEN K$ =  CHR$(39): REM  SWITCH QUOTATION MARK
  53. 111  IF K$ = "@"  THEN 500: REM  '@" KEY TO TRIGGER DISK SAVE
  54. 112  IF UC = 0  AND K$ > CHR$(64)  AND K$ < CHR$(91)  THEN H =  ASC(K$) +32:K$ =  CHR$(H): REM  TEST FOR <CTRL-A>ALPHA CHARACTER AND CONVERT TO LOWER-CASE
  55. 113  IF UC = 1  THEN UC = 0
  56. 114  IF XS = 1  THEN UC = 1
  57. 115  IF K$ > CHR$(31)  THEN 240
  58. 120  IF K$ =  CHR$(27)  THEN UC = 1: GOTO 105: REM  ESC KEY
  59. 121  IF K$ =  CHR$(19)  AND XS = 1  THEN XS = 0: GOTO 130: REM  CTRL S
  60. 122  IF K$ =  CHR$(19)  AND XS = 0  THEN XS = 1
  61. 123  IF K$ =  CHR$(24)  THEN  HOME : GOTO 865
  62. 130  IF UC = 0  AND K$ > CHR$(64)  AND K$ < CHR$(91)  THEN H =  ASC(K$) +32:K$ =  CHR$(H): REM  TEST FOR ALPHA CHARACTER AND CONVERT TO LOWER-CASE
  63. 135  IF K$ =  CHR$(26)  OR K$ =  CHR$(23)  THEN K$ =  CHR$( ASC(K$) +5)
  64. 150  IF K$ =  CHR$(8)  AND N = 1  AND LL = 0  THEN  PRINT "":X$ = "": GOTO 105: REM  LEFT ARROW BACKSPACE
  65. 151  IF K$ =  CHR$(8)  AND  RIGHT$(X$,1) < >""  AND N = 1  THEN  HTAB 1:X$ = "":LL = 0:FL = 0: GOTO 105
  66. 160  IF K$ =  CHR$(8)  AND LL > = 40  THEN 900
  67. 170  IF K$ =  CHR$(8)  THEN N = N -1:FL = FL -( LEN(X$) + LEN(A$(N))):LL = LL -( LEN(X$) + LEN(A$(N))): HTAB FL +1:X$ = "": GOTO 105
  68. 180  IF K$ = "@"  THEN 500: REM   '@" KEY TO TRIGGER DISK SAVE
  69. 190  IF FL = 40  THEN FL = 0
  70. 200  IF K$ =  CHR$(13)  THEN 800: REM  RETURN KEY TO TRIGGER END OF LINE SPACING
  71. 210  IF K$ =  CHR$(25)  THEN A$(N) = X$:X$ = "": GOTO 950: REM   CNTL-Y TRIGGERS UNJUSTIFIED END-OF-LINE
  72. 220  IF K$ =  CHR$(20)  THEN  FOR X = 1 TO TB: PRINT S$;:X$ = X$ +S$:FL = FL +1:LL = LL +1: NEXT : GOTO 105
  73. 230  REM  *** BUILD IN SPACES BETWEEN WORDS AND SENTENCES ***
  74. 240  IF K$ = " "  AND X$ < >""  AND  RIGHT$(X$,1) < >" "  THEN A$(N) = X$ +S$:X$ = "":LL = LL +1:FL = FL +1: GOTO 104
  75. 250  IF UC = 1  THEN UC = 0
  76. 255  IF XS = 1  THEN UC = 1
  77. 260  IF K$ =  CHR$(7)  THEN 1300: REM  CTRL G GETS THE EDIT OPTIONS LIST
  78. 265  IF K$ =  CHR$(19)  THEN 290: REM  CTRL S LOCKS/UNLOCKS CAPITAL LETTERS
  79. 267  IF K$ < CHR$(32)  THEN LL = LL -1:FL = FL -1
  80. 270 X$ = X$ +K$:LL = LL +1
  81. 280 FL = FL +1
  82. 290  IF LL > = SL -7  THEN  PRINT  CHR$(7);: REM  END OF LINE BEEPER
  83. 295  GOTO 105
  84. 300  REM  SET UP TEXT ENTRY SCREEN FORMAT SUBROUTINE
  85. 302  IF MU = 2  OR MU = 3  OR V = 3  THEN  PRINT Z: GOTO 305
  86. 303  PRINT I
  87. 305  FOR KK = 1 TO SL -1: PRINT  CHR$(95);: NEXT KK: PRINT 
  88. 310  IF SL <41  THEN CC =  PEEK(37): VTAB CC
  89. 315  IF SL > = 41  AND SL < = 80  THEN CC =  PEEK(37) -1: VTAB CC
  90. 320  IF SL >80  THEN CC =  PEEK(37) -2: VTAB CC
  91. 325  RETURN 
  92. 500  REM  ** WRITE **
  93. 502  PRINT D$;"OPEN TFILE-";ST$
  94. 505  PRINT D$;"WRITE TFILE-";ST$
  95. 510  PRINT I -1
  96. 512  PRINT SL
  97. 513  PRINT TB
  98. 515  FOR X = 1 TO I -1
  99. 520  PRINT  CHR$(34);L$(X)
  100. 525  NEXT X
  101. 530  PRINT D$;"CLOSE"
  102. 535  IF RV$ = "B"  THEN  RETURN : REM  RETURN TO CALL FROM LINE 1067
  103. 540  PRINT D$"IN#0": PRINT "END": END 
  104. 600 X = 0: REM  *** READ DISK FILE ***
  105. 602  PRINT D$;"OPEN TFILE-";ST$
  106. 605  PRINT D$;"READ TFILE-";ST$
  107. 610  INPUT I
  108. 612  INPUT SL
  109. 614  INPUT TB
  110. 625  FOR X = 1 TO I
  111. 630  CALL 768,L$(X)
  112. 632  IF  LEN(L$(X)) >1  THEN L$(X) =  RIGHT$(L$(X), LEN(L$(X)) -1)
  113. 633  IF  LEN(L$(X)) = 1  THEN L$(X) = ""
  114. 635  NEXT 
  115. 655  PRINT RT$;D$;"CLOSE"
  116. 700  REM  *** OPTION BRANCH AFTER READING DISK ***
  117. 701  IF V = 1  THEN DMY = 1: INPUT "PRINT TO PRINTER? Y OR N";XX$: IF XX$ = "Y"  THEN 1200
  118. 702  IF V = 3  THEN I = I +1: GOTO 1300
  119. 703  IF V = 4  THEN 710
  120. 705  GOTO 1200
  121. 709  REM  *** ADD DATA ***
  122. 710  INVERSE : INPUT "REVIEW TEXT? Y OR N?";RV$: NORMAL 
  123. 711 R1 = 1:R2 = I
  124. 712  IF RV$ = "Y"  THEN R1 = 1:R2 = I: GOSUB 18
  125. 715 I = I +1:N = 0:LL = 0:FL = 0:TT = 0
  126. 717  INVERSE : INPUT "BEGIN NEW PARAGRAPH? Y OR N?";NP$: NORMAL 
  127. 718  IF NP$ < >"Y"  THEN 725
  128. 720 L$(I) = "":I = I +1: PRINT  CHR$(13): REM  INSERT EXTRA PARAGRAPH SPACE
  129. 725  GOTO 91
  130. 799  REM  **** END OF LINE SPACING ****
  131. 800 L$(I) = "": IF N < = 1  AND FL < = 1  THEN 864
  132. 805 A$(N) = X$: FOR X = 1 TO N:TT = TT + LEN(A$(X)): NEXT X
  133. 810 LI = SL -LL -1
  134. 812  IF LI <0  THEN WK$ =  RIGHT$(A$(N -1), ABS(LI) +1):LE =  LEN(A$(N -1)) - ABS(LI) -1:A$(N -1) =  LEFT$(A$(N -1),LE) +"-": GOTO 860
  135. 815  IF LI <N -2  AND AF = 1  THEN DMY = 1: FOR X = 1 TO LI +1:A$(X) = A$(X) +S$: NEXT X:AF = 0: GOTO 860
  136. 817  IF LI <N -2  AND AF = 0  THEN DMY = 1: FOR X = N -2 TO ((N -2) -LI)  STEP  -1:A$(X) = A$(X) +S$: NEXT X:AF = 1: GOTO 860
  137. 820  REM  ** # OF FILL SPACES NEEDED > THAN # OF WORDS ... MULTIPLE PASSES **
  138. 822  IF N <3  THEN N = 3
  139. 825 ZZ =  INT(LI/(N -2))
  140. 830 YY = LI -(ZZ *(N -2))
  141. 832  FOR M = 1 TO ZZ
  142. 835  FOR X = 1 TO N -2
  143. 840 A$(X) = A$(X) +S$
  144. 845  NEXT X: NEXT M
  145. 847  IF YY = 0  THEN A$(N -3) = A$(N -3) +S$: GOTO 860
  146. 850  IF FA = 1  THEN DMY = 1: FOR X = 1 TO YY +1:A$(X) = A$(X) +S$: NEXT X:FA = 0: GOTO 860
  147. 855  IF FA = 0  THEN DMY = 1: FOR X = N -2 TO ((N -2) -YY)  STEP  -1:A$(X) = A$(X) +S$: NEXT X:FA = 1
  148. 860  FOR X = 1 TO N -1:L$(I) = L$(I) +A$(X):A$(X) = "": NEXT X:LG =  LEN(L$(I))
  149. 861  IF  RIGHT$(L$(I),1) = " "  THEN L$(I) =  LEFT$(L$(I),LG -1)
  150. 862  IF MU >0  THEN  RETURN 
  151. 864 I = I +1
  152. 865  GOSUB 300
  153. 875 N = 1:LL = 0
  154. 880 X$ = ""
  155. 889 TT = 0:FL = 0
  156. 890  IF V = 3  THEN  RETURN 
  157. 892  IF MU >0  THEN  RETURN 
  158. 893  IF WK$ = ""  THEN 105
  159. 894 DMY = 1: FOR MM = 1 TO  LEN(WK$):M$ =  MID$ (WK$,MM,1): INVERSE : IF M$ > CHR$(96)  AND M$ < CHR$(123)  THEN M$ =  CHR$( ASC(M$) -32): NORMAL 
  160. 895  IF M$ < CHR$(64)  THEN  NORMAL 
  161. 896  PRINT M$;: NORMAL : NEXT :LE =  LEN(WK$):FL = LE:LL = LE:A$(N) = WK$:N = N +1:WK$ = "": GOTO 105
  162. 900  REM  BACKSPACING
  163. 901  IF LL = 40  OR LL = 80  THEN GT = 1: REM  GATE FOR BACKSPACE TAB BETWEEN LINES NO OVERFLOW
  164. 902  IF LL < = 79  AND LL -( LEN(X$) + LEN(A$(N -1))) <40  THEN 915
  165. 904  IF LL > = 80  AND LL < = 119  AND LL -( LEN(X$) + LEN(A$(N -1))) <80  THEN 915
  166. 906  IF LL > = 120  AND LL < = 132  AND LL -( LEN(X$) + LEN(A$(N -1))) <120  THEN 915
  167. 907 CS =  PEEK(37): VTAB 1: VTAB CS
  168. 908  GOTO 170: REM  RETURN NO HIT
  169. 915 LL = LL -( LEN(X$) + LEN(A$(N -1)))
  170. 917 CS =  PEEK(37)
  171. 918  IF GT = 1  THEN GT = 0: VTAB CS +1: GOTO 921
  172. 919  VTAB CS
  173. 921 FL = LL -( INT(LL/40) *40)
  174. 923  HTAB FL +1
  175. 925 N = N -1:X$ = ""
  176. 930  GOTO 105
  177. 949  REM  **** NEW PGH WITH RIGHT ARROW ****
  178. 950 L$(I) = "": FOR X = 1 TO N -1:L$(I) = L$(I) +A$(X):A$(X) = "": NEXT :LG =  LEN(L$(I)):L$(I) =  LEFT$(L$(I),LG -1)
  179. 955  PRINT  CHR$(13)
  180. 957  IF MU >0  THEN  RETURN 
  181. 961  GOTO 864
  182. 1000  REM  ** EDITING ROUTINES **
  183. 1009  INVERSE :II = I: INPUT "ENTER LINE # TO RETYPE ";Z
  184. 1010  HOME : PRINT "LINE ";Z: FOR XX = 1 TO  LEN(L$(Z)):M$ =  MID$ (L$(Z),XX,1): INVERSE : IF M$ > CHR$(96)  AND M$ < CHR$(123)  THEN M =  ASC(M$) -32:M$ =  CHR$(M): NORMAL 
  185. 1011  IF M$ < CHR$(64)  THEN  NORMAL 
  186. 1012  PRINT M$;: NORMAL : NEXT : PRINT 
  187. 1020  VTAB 10
  188. 1030 I = Z:N = 1:LL = 0:FL = 0:TT = 0: GOTO 105
  189. 1057  IF MU >0  THEN  RETURN 
  190. 1058  INVERSE : INPUT "ADD NEW TEXT? Y OR N?";RV$: NORMAL 
  191. 1059  IF RV$ = "Y"  THEN V = 4:I = I -1: GOTO 710
  192. 1060  INVERSE : PRINT "WRITE TO DISK OR PRINTER OR BOTH?": INPUT "'D' OR 'P' OR 'B'";RV$: NORMAL 
  193. 1065  IF RV$ = "D"  THEN 500
  194. 1066  IF MU >0  THEN  RETURN 
  195. 1067  IF RV$ = "B"  THEN  GOSUB 500
  196. 1070  GOTO 1200
  197. 1075  INVERSE : INPUT "DELETE OR ERASE LINE(S)? D OR E? ";DE$
  198. 1076  IF MU = 5  THEN DE$ = "ERASE"
  199. 1077  IF MU = 4  THEN DE$ = "DELETE"
  200. 1078  PRINT DE$;" FROM LINE #";: INPUT ML: INPUT "TO LINE #?";EL:NL = EL -ML: IF NL < = 0  THEN NL = 1: NORMAL 
  201. 1079  IF MU = 5  THEN DMY = 1: FOR X = ML TO ML +NL -1:L$(X) = "": NEXT X: RETURN 
  202. 1081  FOR X = ML TO I -NL:L$(X) = L$(X +NL): NEXT X:I = I -NL: FOR X = I +1 TO I +NL:L$(X) = "": NEXT X
  203. 1082  RETURN 
  204. 1085  REM  **** INSERT A LINE ****
  205. 1087  INVERSE : INPUT "INSERT FROM LINE #";ML: INPUT "TO LINE #";EL:NL = EL -ML: IF NL < = 0  THEN NL = 1: NORMAL 
  206. 1089  FOR X = (I +NL) TO (ML +NL)  STEP  -1:L$(X) = L$(X -NL): NEXT X
  207. 1091  FOR X = ML TO ML +NL -1:L$(X) = "": NEXT X:I = I +NL
  208. 1092  RETURN 
  209. 1200  REM  *** PRINT ROUTINE ***
  210. 1202  INVERSE 
  211. 1203  INPUT "AUTO PAGE NUMBER ON OVERFLOW? Y OR N";PO$
  212. 1205  INPUT "CENTER TEXT ON PAGE? Y OR N?";RV$
  213. 1206  INPUT "SINGLE OR DOUBLE SPACING? S OR D? ";SC$:MOD = 58: IF SC$ = "D"  THEN MOD = 28
  214. 1207  INPUT "PRINT LINE #'S?  Y OR N ";II$: PRINT "SPECIFY PRINT DENSITY (CHAR/INCH)": INPUT "1=8  2=10  3=12  4=16 CH/INCH ";CI
  215. 1208  IF CI = 1  THEN CI$ =  CHR$(28):CP = 72:WS = 5
  216. 1209  IF CI = 2  THEN CI$ =  CHR$(29):CP = 85:WS = 6
  217. 1210  IF CI = 3  THEN CI$ =  CHR$(30):CP = 102:WS = 7
  218. 1211  IF CI = 4  THEN CI$ =  CHR$(31):CP = 140:WS = 10
  219. 1212  INPUT "ENHANCED OR NORMAL MODE? E OR N? ";XX$
  220. 1213  IF XX$ = "E"  THEN EN = 1:CP =  INT(CP/2):WS = WS *2: GOTO 1215
  221. 1214 EN = 2
  222. 1215  PRINT D$;"PR#1": REM    TURN ON PRINTER IN SLOT 1
  223. 1220  PRINT  CHR$(9)"80N"
  224. 1221  PRINT CI$; CHR$(EN);
  225. 1224 CTR = 1
  226. 1225  IF RV$ = "Y"  THEN CTR =  INT(((CP -SL)/2) -WS)
  227. 1226  IF CTR <1  THEN CTR = 1
  228. 1227 PK = 0
  229. 1228 PG = 2
  230. 1229  IF II$ < >"Y"  THEN 1235
  231. 1230  FOR X = 1 TO I:PK = PK +1: IF PO$ < >"Y"  THEN 1232
  232. 1231 SP =  INT((PK/MOD - INT(PK/MOD)) *MOD +.05) * SGN(PK/MOD): IF SP = 0  THEN  GOSUB 40
  233. 1232  HTAB CTR: PRINT X;".";L$(X): IF SC$ = "D"  THEN  PRINT 
  234. 1233  NEXT X: GOTO 1248
  235. 1235  FOR X = 1 TO I
  236. 1236 PK = PK +1: IF PO$ < >"Y"  THEN 1239
  237. 1237 SP =  INT((PK/MOD - INT(PK/MOD)) *MOD +.05) * SGN(PK/MOD): IF SP = 0  THEN  GOSUB 40
  238. 1239  HTAB CTR: PRINT L$(X): IF SC$ = "D"  THEN  PRINT 
  239. 1240  NEXT X
  240. 1248  PRINT  CHR$(9);"40N": REM   RESET PRINT LINE TO 40 CHARACTERS TO PREPARE FOR SHUTTING OFF PRINTER
  241. 1250  PRINT D$;"PR#0": REM  SHUT OFF PRINTER
  242. 1255  HOME : PRINT "END OF PRINTING": INVERSE : INPUT "ANOTHER COPY? Y OR N ";ZZ$: NORMAL : IF ZZ$ = "Y"  THEN 1213
  243. 1257  IF MU = 9  THEN  RETURN 
  244. 1260  END 
  245. 1300  TEXT : HOME : FOR ZA = 0 TO 39: PRINT "*";: NEXT ZA: PRINT "   ** EDITING OPTIONS LIST **"
  246. 1301  ONERR  GOTO 11000
  247. 1302 V = 0: REM  ERASE POINTER
  248. 1303  CALL  PEEK(103) + PEEK(104) *256 +5
  249. 1305  PRINT "1= REVIEW TEXT";: PRINT  TAB( 23)"6= INSERT LINE(S)": PRINT "2= RETYPE 1 LINE";: PRINT  TAB( 23)"7= P'GRAPH SHIFT"
  250. 1307  PRINT "3= RETYPE MULTI-LINES";: PRINT  TAB( 23)"8= FIND & REPLACE": PRINT "4= DELETE LINE(S)";: PRINT  TAB( 23)"9= PRINT TEXT"
  251. 1309  PRINT "5= ERASE LINE(S)";: HTAB 22: PRINT "10=";: INVERSE : PRINT " RESUME TYPING": NORMAL 
  252. 1310  HTAB 18: PRINT "CTRL X=";: INVERSE : PRINT " ABORT OPTION ": NORMAL 
  253. 1317  FOR ZA = 0 TO 39: PRINT "*";: NEXT ZA: PRINT 
  254. 1318  POKE 34, PEEK(37) -1
  255. 1319 IX = I: POKE 34,8
  256. 1320  INVERSE : INPUT "ENTER SELECTION ";MU: NORMAL 
  257. 1322  IF MU <0  OR MU >10  THEN  PRINT "INVALID ENTRY.. TRY AGAIN": GOTO 1320
  258. 1325  IF MU = 1  THEN RV$ = "Y"
  259. 1327  IF MU = 10  THEN  PRINT  FRE(0): GOTO 1342
  260. 1330  ON MU GOSUB 1700,1009,1500,1076,1076,1087,1400,1600,1200
  261. 1331 DE$ = ""
  262. 1332  IF MU = 1  OR MU = 2  OR MU = 3  OR MU = 9  OR V = 3  THEN I = IX
  263. 1335  GOTO 1319
  264. 1340  IF XX$ = "Y"  THEN 1319
  265. 1342 I = I -1: INPUT "APPEND FILE FROM DISK ? Y/N ";K$: IF  LEFT$(K$,1) = "Y"  THEN 1350
  266. 1343 MU = 20: REM  TRIGGERS RETURN BUT NO ACTION
  267. 1345  GOSUB 864
  268. 1346 L$(I) = ""
  269. 1347 MU = 0:N = N -1:V = 1: GOTO 91: REM  RESET EDIT POINTERS. RETURN TO TYPING.
  270. 1350  INPUT "WHAT SUBJECT ? ";K$
  271. 1351  IF K$ = ""  THEN  PRINT D$;"CATALOG": GOTO 1350
  272. 1353  PRINT D$;"OPEN TFILE-";K$
  273. 1355  PRINT D$;"READ TFILE-";K$
  274. 1360  INPUT Y: INPUT SL: INPUT TB
  275. 1365  FOR X = (I +1) TO (Y +I): INPUT L$(X): NEXT 
  276. 1370  PRINT RT$;D$;"CLOSE"
  277. 1375 I = X: GOTO 1300
  278. 1400  REM  PARAGRAPH SHIFT
  279. 1405  INVERSE : INPUT "SOURCE PARAGRAPH STARTING LINE ";S1: INPUT "SOURCE PARAGRAPH ENDING LINE ";S2
  280. 1410  INPUT "DESTINATION PARAGRAPH STARTING LINE ";D1: NORMAL 
  281. 1411 NL = S2 -S1 +1:DD = 0:T1 = S1:T2 = S2:T3 = D1
  282. 1412  IF S2 <D1  THEN NL = T3 -T2 -1:S1 = T2 +1:S2 = T3 -1:D1 = T1: REM  ASCENDING MOVE CONVERSION
  283. 1415  IF NL < = 0  THEN NL = 1
  284. 1420 ML = D1:MU = 6: GOSUB 1089:MU = 7: REM  INSERT DESTINATION LINES
  285. 1425  FOR X = 0 TO NL -1: REM  COPY INTO DESTINATION
  286. 1426 L$(D1 +X) = L$(S1 +NL +X): REM  DESCENDING MOVE ALGORITHM
  287. 1429  NEXT X
  288. 1430 ML = S1 +NL:MU = 4: GOSUB 1081:MU = 7: REM  DELETE SOURCE LINES
  289. 1435  RETURN 
  290. 1500  REM  RETYPE MULTI LINES
  291. 1505  INVERSE : INPUT "ENTER STARTING LINE # TO RETYPE ";Q1
  292. 1510  INPUT "ENTER THE ENDING LINE # TO RETYPE ";Q2: NORMAL 
  293. 1512  IF Q2 >I  THEN Q2 = I
  294. 1515  FOR QQ = Q1 TO Q2:Z = QQ: GOSUB 1010: NEXT QQ
  295. 1520  RETURN 
  296. 1600  HOME : INPUT "SEARCH ALL LINES Y/N ? ";X$: IF X$ = "Y"  THEN R1 = 1:R2 = I: GOTO 1602
  297. 1601  INPUT "STARTING LINE # ? ";R1: INPUT "ENDING LINE # ? ";R2: IF R1 <1  THEN R1 = 1
  298. 1602  IF R2 >I  THEN R2 = I
  299. 1603  IF R1 >R2  THEN 1601
  300. 1604  PRINT "WHAT STRING TO SEARCH FOR ? ";:X$ = "":UC = 0: GOSUB 1690:SE$ = X$
  301. 1605  INPUT "REPLACE OR SEARCH ONLY ? R/S ";AN$: IF AN$ = "R"  THEN  PRINT "WHAT STRING TO REPLACE WITH ? ";:X$ = "":UC = 0: GOSUB 1690:RE$ = X$
  302. 1606 SW = 0: INPUT "BROAD OR EXACT SEARCH ? B/E ";X$: IF X$ = "B"  THEN X$ = SE$:SE$ = "": FOR X = 1 TO  LEN(X$):Q =  ASC( MID$ (X$,X,1)):SE$ = SE$ + CHR$(Q -32 *(Q >95)): NEXT :SW = 1
  303. 1607 WS = 0: IF AN$ = "R"  THEN  INPUT "REPLACE AUTO OR MANUAL ? A/M ";XN$: IF XN$ = "M"  THEN WS = 1
  304. 1608  INPUT "IS ALL DATA CORRECT ? Y/N ";K$: IF K$ < >"Y"  THEN 1600
  305. 1610  HOME : POKE 34,9: VTAB 9: INVERSE : PRINT "SEARCHING LINE #": NORMAL :SE =  LEN(SE$):RE =  LEN(RE$): FOR X = R1 TO R2:LE =  LEN(L$(X)): IF SE >LE  OR LE = 0  THEN  NEXT : RETURN 
  306. 1611  IF SW = 0  THEN WK$ = L$(X): GOTO 1615
  307. 1613 WK$ = "": FOR Y = 1 TO LE:Z =  ASC( MID$ (L$(X),Y,1)):WK$ = WK$ + CHR$(Z -32 *(Z >95)): NEXT 
  308. 1615  FOR Y = 1 TO LE -SE +1: IF SE$ =  MID$ (WK$,Y,SE)  THEN  GOSUB 1620:Y = Y +SE
  309. 1616  NEXT :X = X +1: POKE 1082, INT(X/100) +176: POKE 1083, INT((X - INT(X/100) *100)/10) +176: POKE 1084,(X - INT(X/10) *10) +176:X = X -1: NEXT 
  310. 1617  RETURN 
  311. 1620  PRINT "LINE # ";X;: HTAB 12: PRINT "AT POSITION ";Y
  312. 1623 G =  FRE(0)
  313. 1625  IF AN$ < >"R"  THEN  RETURN 
  314. 1626  IF WS = 0  THEN 1630
  315. 1627  GOSUB 1680: INPUT "REPLACE ? Y/N ";XN$: IF XN$ = "Y"  THEN 1630
  316. 1629  RETURN 
  317. 1630  IF SW = 1  THEN 1640
  318. 1632  IF Y = 1  THEN 1637
  319. 1633  IF Y +SE > = (LE)  THEN 1638
  320. 1635 X$ =  LEFT$(L$(X),Y -1) +RE$ + RIGHT$(L$(X),LE -Y +1 -RE):L$(X) = X$:X$ = "": RETURN 
  321. 1637 X$ = RE$ + RIGHT$(L$(X),LE -RE):L$(X) = X$:X$ = "": RETURN 
  322. 1638 X$ =  LEFT$(L$(X),Y -1) +RE$:L$(X) = X$:X$ = "": RETURN 
  323. 1640 SW = 0:K$ = "": FOR Q = 1 TO SE:D =  ASC( MID$ (L$(X),Y -1 +Q,1)): IF D >95  THEN SW = 1
  324. 1642  NEXT 
  325. 1645  IF SW = 0  THEN  FOR Q = 1 TO RE:K =  ASC( MID$ (RE$,Q,1)):K$ = K$ + CHR$(K -32 *(K >95)): NEXT : GOTO 1660
  326. 1650 D =  ASC( MID$ (L$(X),Y,1)):E =  ASC( LEFT$(RE$,1)): IF D >64  AND D <96  AND E >95  THEN K$ =  CHR$(E -32) + RIGHT$(RE$,RE -1): GOTO 1660
  327. 1655 K$ = RE$
  328. 1660  IF Y = 1  THEN 1670
  329. 1662  IF Y +SE > = (LE)  THEN 1675
  330. 1665 X$ =  LEFT$(L$(X),Y -1) +K$ + RIGHT$(L$(X),LE -Y +1 -SE):L$(X) = X$:X$ = "":K$ = "": RETURN 
  331. 1670 X$ = K$ + RIGHT$(L$(X),LE -SE):L$(X) = X$:X$ = "":K$ = "": RETURN 
  332. 1675 X$ =  LEFT$(L$(X),Y -1) +K$:L$(X) = X$:X$ = "":K$ = "": RETURN 
  333. 1680  PRINT X;")";: FOR XX = 1 TO  LEN(L$(X)):M$ =  MID$ (L$(X),XX,1)
  334. 1681  INVERSE : IF M$ > CHR$(96)  AND M$ < CHR$(123)  THEN M =  ASC(M$) -32:M$ =  CHR$(M): NORMAL 
  335. 1682  IF M$ < CHR$(64)  THEN  NORMAL 
  336. 1683  PRINT M$;: NORMAL : NEXT : PRINT : RETURN 
  337. 1690  GET K$:K =  ASC(K$): IF K = 26  OR K = 22  THEN K$ =  CHR$(K +5)
  338. 1691  IF K = 27  THEN UC = 1: GOTO 1690
  339. 1692  IF UC = 1  AND K >64  AND K <91  THEN  INVERSE 
  340. 1693  PRINT K$;: NORMAL 
  341. 1694  IF UC = 0  THEN K$ =  CHR$(K +32 *(K >64  AND K <91))
  342. 1695  IF K = 13  THEN UC = 0: RETURN 
  343. 1696  IF K = 8  THEN  PRINT  CHR$(92):X$ = "": GOTO 1690
  344. 1697 X$ = X$ +K$:UC = 0: GOTO 1690
  345. 1700  REM  REVIEW LINES
  346. 1705  INVERSE : INPUT "REVIEW (1) ALL LINES OR (2) SELECTIVE?";RP: NORMAL 
  347. 1710  IF RP <1  OR RP >2  THEN  PRINT "ERROR..TRY AGAIN": GOTO 1705
  348. 1715  IF RP = 1  THEN R1 = 1:R2 = I: GOSUB 18: RETURN : REM  ** ALL LINES **
  349. 1720  INVERSE : INPUT "ENTER STARTING LINE # TO REVIEW";R1: INPUT "ENTER ENDING LINE # TO REVIEW";R2: NORMAL : HOME 
  350. 1725  IF R2 >I  THEN R2 = I
  351. 1730  GOSUB 18: RETURN 
  352. 10000  DIM A$(90),L$(200)
  353. 10001 X$ = ""
  354. 10005 D$ =  CHR$(4):RT$ =  CHR$(13)
  355. 10007  PRINT D$;"BLOADINPUTALL"
  356. 10008 U$ =  CHR$(27)
  357. 10010 MOD = 60
  358. 10012 EN = 2
  359. 10015 I = 1:LL = 0:FL = 0
  360. 10020  PRINT D$;"NOMONI,O,C"
  361. 10021 N = 0:S$ = " ": RETURN 
  362. 10023  HOME 
  363. 10025  FOR ZA = 0 TO 39: PRINT "*";: NEXT ZA: PRINT : HTAB 13: INVERSE : PRINT "** T.O.U.G.H.**": NORMAL 
  364. 10027  HTAB 4: INVERSE : PRINT "COPYRIGHT 1980 - MICRO-SPARC, INC.": NORMAL 
  365. 10029  PRINT "THE 'TEXT OUTPUTER, UPDATER, AND": PRINT "GENERALIZED FORMATTER (T.O.U.G.H.) IS": PRINT "A SYSTEM FOR MANAGING TEXT OF ALL"
  366. 10031  PRINT "TYPES.  IN OPERATION WITH THE APPLE II": PRINT "AND THE IDS 440 PRINTER, IT CAN HANDLE": PRINT "4 DIFFERENT PRINT SIZES AS WELL AS WIDE"
  367. 10033  PRINT "'ENHANCED' PRINTING.": PRINT : PRINT "THE SYSTEM IS GENERALLY SELF-PROMPTING.": PRINT : PRINT "TO COMPENSATE FOR THE DIFFERENCES IN "
  368. 10035  PRINT "PRINT SIZES...WHICH BECOMES ESPECIALLY": PRINT "IMPORTANT IN AUTOMATIC TEXT CENTERING,": PRINT "USE THE FOLLOWING GUIDELINES:"
  369. 10037  PRINT "DECIDE WHICH SIZE TO USE FOR FINAL TEXT": PRINT "PRINTING.  THEN USE THE TABLE ON THE": PRINT "NEXT PAGE TO DECIDE ON THE LINE LENGTH"
  370. 10039  PRINT : INPUT "HIT RETURN KEY TO GO TO NEXT PAGE";XX$
  371. 10041  HOME : HTAB 9: PRINT "** TABLE OF LINE LENGTHS **": PRINT : PRINT "DECIDE ON PRINT SIZE (8.3, 10, 12, 16.5": PRINT "CHARACTERS/INCH). THEN DECIDE ON NORMAL"
  372. 10043  PRINT "OR ENHANCED PRINTING. THEN TRY TO MAKE": PRINT "YOUR LINE LENGTH EQUAL TO OR LESS THAN": PRINT "THE LINE LENGTH SHOWN BELOW:"
  373. 10045  PRINT : HTAB 18: PRINT "LINE LENGTHS": PRINT "PRINT SIZE     NORMAL   ENHANCED"
  374. 10046  FOR ZA = 0 TO 39: PRINT  CHR$(95);: NEXT ZA: PRINT 
  375. 10047  PRINT "8.3 CHAR/INCH   60       30"
  376. 10048  PRINT "10  CHAR/INCH   70       40"
  377. 10049  PRINT "12  CHAR/INCH   85       45"
  378. 10050  PRINT "16.5 CHAR/INCH 115       60"
  379. 10052  PRINT : INVERSE : INPUT "SPECIFY LINE LENGTH ";SL
  380. 10053  INPUT "# OF CHARACTERS TO INDENT FOR TAB ";TB
  381. 10060 SL = SL +1
  382. 10065  INPUT "HIT RETURN KEY TO BEGIN ";XX$: NORMAL : RETURN 
  383. 11000  PRINT  CHR$(9)"40N": PR# 0: PRINT : REM  PRINT "" IS PRINT"CTRL I 40N"
  384. 11005  PRINT "ERROR #"; PEEK(222);" IN LINE #"; PEEK(218) + PEEK(219) *256
  385. 11010  PRINT "IF YOU HAVE BEEN ALREADY TYPING IN TEXT": PRINT "YOU CAN RECOVER IT BY ENTERING: ": PRINT : PRINT "    GOTO 1300 (RETURN) ": END